#Boa:Dialog:Dialog1

import wx
import wx.grid
import consultasBD
import Mensaje
import sincronizar_tabla  
import utiles

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1GRID1, wxID_DIALOG1STATICTEXT1, 
] = [wx.NewId() for _init_ctrls in range(3)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(295, 3), size=wx.Size(679, 421),
              style=wx.DEFAULT_DIALOG_STYLE,
              title='Discrepancias de Transferencias')
        self.SetClientSize(wx.Size(663, 385))

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 56), size=wx.Size(640, 200),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnClickIzquierdo)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnClickDerecho)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDclickIzq)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK, self.OnDclickDer)

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Discrepancias de Transacciones: ', name='staticText1',
              parent=self, pos=wx.Point(16, 8), size=wx.Size(159, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.padre = parent
        self.sucursal = self.padre.sucursalNro

        self.cargaGrilla()

    
    def cantidad_discrepancias(self):
        sql = "SELECT COALESCE(count(*),1) as cantidad FROM discrepancias d JOIN transferencias t ON (d.trans = t.id)"
        resultados = consultasBD.ordenCrudaResultDict(sql)
        return resultados['cantidad']

    def cargaGrilla(self):
        #columnas =['Nro Transaccion','Cod. Producto','Cantidad','Tipo','Corregir','Vend. ult. 5 dias','Visto']
        columnas =['Nro Transaccion','Cod. Producto','   Cantidad    ','            Tipo           ', '         Fecha           ']
        self.grid1.CreateGrid(30, len(columnas))
        
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
            
        self.grid1.AutoSizeColumn(0,True)
        self.grid1.AutoSizeRow(0,True)
        self.grid1.AutoSizeColumn(2,True)
        self.grid1.AutoSizeColumn(3,True)
        self.grid1.AutoSizeColumn(4,True)
        #self.grid1.AutoSizeColumn(5,True)
        self.grid1.DisableDragColSize()
        self.grid1.DisableDragRowSize()
        self.total = "" 
        
        for x in xrange(30):
            for i in xrange(len(columnas)):
                self.grid1.SetReadOnly(x,i,True)
        
        sql = "SELECT * FROM discrepancias d  ORDER BY fecha desc"

        resultados = consultasBD.ordenCrudaDict(sql)
        
        for i, r in enumerate(resultados):
                tipo = "FALTA"
                if int(r["tipo"]) == 0:
                    tipo = "SOBRA"
                print r["tipo"]
            
                self.grid1.SetCellValue(i, 0, str(r["trans"])) 
                self.grid1.SetCellValue(i, 1, str(r["ptc"])) 
                self.grid1.SetCellValue(i, 2, str(r['cant']))
                self.grid1.SetCellValue(i, 3, tipo)
                self.grid1.SetCellValue(i, 4, str(r['fecha']))

    def __update_discrepancia(self, trans, ptc, cant_corregido, visto):
        if cant_corregido == 0 and visto == 0:
            return
        
        sql = "SELECT corregido FROM discrepancias WHERE trans = '%s' AND ptc = '%s'" % (trans, ptc)
        result = consultasBD.ordenCrudaResultDict(sql)
        cant_corregido2 = str(int(cant_corregido) + int(result['corregido']))
        
        
        sql = "UPDATE discrepancias SET visto = '%s', corregido = '%s' WHERE trans = '%s' AND ptc = '%s'" % (visto, cant_corregido2, trans, ptc)
        consultasBD.executaSinCommit(None,sql)
        sincronizar_tabla.addChange(sql=sql)        

    def __incrementar_stock(self, ptc, cant_corregido):
        if cant_corregido == 0:
            return
        
        print "cant_corregido", cant_corregido
        stock = utiles.stock_sumado(ptc, self.sucursal, int(cant_corregido))
        sql = "UPDATE stock SET stock = '%s' WHERE ptc = '%s' AND sucursal = '%s'" % (stock, ptc, self.sucursal)
        consultasBD.executaSinCommit(None,sql)
        sincronizar_tabla.addChange(sql=sql)        
        

    def OnGuardarButton(self, event):
        try:
            consultasBD.begin()        
            for i in xrange(30): 
                               
                cant_corregido = self.grid1.GetCellValue(i, 4)
                trans = str(self.grid1.GetCellValue(i, 0))
                ptc = self.grid1.GetCellValue(i, 1)
                
                
                if trans == "":
                    continue
                
                visto = 0
                if self.grid1.GetCellBackgroundColour(i, 6) == utiles.VERDE:
                    visto = 1
                
                #updetea discrepancias y da como finalizado el problema
                self.__update_discrepancia(trans, ptc, cant_corregido, visto)
                
                #SE INCREMENTA EL STOCK LOCAL        
                self.__incrementar_stock(ptc, cant_corregido)
                
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["discrepancias", "stock"])                
            utiles.mensaje(self, "La discrepancia se modifico y sincronizo correctamente")            
            
        except sincronizar_tabla.SyncError:
            utiles.mensaje(self, "La modificacion fue correcta, pero no termino de transmitirse por favor realize un sincronizacion")    
        except Exception, e:
            print e.__str__()
            print dir(e)
            print e.message
            utiles.mensaje(self, "No se realizo la modificacion")    
            consultasBD.rollback()         
            
        self.Close()  

    def OnClickIzquierdo(self, event):
        print "CK"
          
        
        event.Skip()

    def OnClickDerecho(self, event):
            
        print "derecho"
        event.Skip()

    def OnDclickIzq(self, event):
        col = self.grid1.GetGridCursorCol()
        fila = self.grid1.GetGridCursorRow()
        
        #visto
        if col == 6:
            print "col", col
            self.grid1.SetCellBackgroundColour(fila, col, utiles.VERDE)          
        
        #cantidad    
        if col == 4:
            cant = int(self.grid1.GetCellValue(fila, 2))            
            cant_corregido = int(self.grid1.GetCellValue(fila, 4))
            if cant == cant_corregido:
                return
            
            self.grid1.SetCellValue(fila, 4, str(cant_corregido + 1))
               
        self.grid1.Refresh()
        event.Skip()

    def OnDclickDer(self, event):
        col = self.grid1.GetGridCursorCol()
        fila = self.grid1.GetGridCursorRow()
        
        if col == 4:
            cant_corregido = int(self.grid1.GetCellValue(fila, 4))
            if cant_corregido == 0:
                return
            
            self.grid1.SetCellValue(fila, 4, str(cant_corregido - 1))        
        event.Skip()
                
        
